import Mock from 'mockjs';
import { ComponentTypeEnum } from '/@/components/ModelTable/src/types';
import {
  DATA_SOURCE_TYPE_TYPE,
  DATA_DICT_TYPE,
  DATA_API_SOURCE_TYPE,
} from '/@/components/ModelTable/src/consts';
// 固定数据源
export { DATA_SOURCE_TYPE_TYPE, DATA_DICT_TYPE, DATA_API_SOURCE_TYPE };

export const StoreTypeList = [
  {
    label: '缺省',
    value: 0,
  },
  {
    label: '按月',
    value: 1,
  },
  {
    label: '按年',
    value: 2,
  },
  {
    label: '数据库',
    value: 3,
  },
];

export const LabelTypeList = [
  {
    label: '圆点',
    value: 'round',
  },
  {
    label: '标签',
    value: 'tag',
  },
];

export const UpdateTypeList = [
  {
    label: '可读写',
    value: 1,
  },
  {
    label: '必读写',
    value: 2,
  },
  {
    label: '只读',
    value: 0,
  },
];

export const BtnTypeList = [
  {
    label: '主按钮',
    value: 'primary',
  },
  {
    label: '次按钮',
    value: 'default',
  },
  {
    label: '虚线按钮',
    value: 'dashed',
  },
  {
    label: '链接按钮',
    value: 'link',
  },
];

export const BtnShapeList = [
  {
    label: '矩形',
    value: 'default',
  },
  {
    label: '圆角',
    value: 'round',
  },
  {
    label: '圆形',
    value: 'circle',
  },
];
export const RetractList = [
  {
    label: '不收起',
    value: 0,
  },
  {
    label: '收起',
    value: 1,
  },
];

const tempList = (num = 12) => {
  return Mock.mock({
    [`list|${num}`]: [
      {
        label() {
          // @ts-ignore
          return this.value;
        },
        'value|+1': 1,
      },
    ],
  }).list;
};
export const LabelWidthList = tempList();
export const ContentWidthList = tempList(24);

export const PickerDateList = [
  {
    label: '日',
    value: 'date',
  },
  {
    label: '周',
    value: 'week',
  },
  {
    label: '月份',
    value: 'month',
  },
  {
    label: '季度',
    value: 'quarter',
  },
  {
    label: '年份',
    value: 'year',
  },
];

// 数据来源
export const OPTIONS_TYPE = [
  ComponentTypeEnum.ApiSelect,
  ComponentTypeEnum.ApiTreeSelect,
  ComponentTypeEnum.RadioGroup,
  ComponentTypeEnum.CheckboxGroup,
];

// 事件类型
export const Event_List = [
  {
    text: '值变化',
    event: 'onChange',
    disabled: false,
  },
];

// 事件类型
export const Event_Focus_Blur_List = [
  {
    text: '获得焦点',
    event: 'onFocus',
    disabled: false,
  },
  {
    text: '失去焦点',
    event: 'onBlur',
    disabled: false,
  },
];

// 事件类型
export const Event_Search_List = [
  {
    text: '查询',
    event: 'onSearch',
    disabled: false,
  },
];

// 事件类型
export const Event_Upload_BTN_List = [
  {
    text: '保存',
    event: 'onSave',
    disabled: false,
  },
  {
    text: '删除文件',
    event: 'onDelete',
    disabled: false,
  },
];

// 事件类型
export const Event_Upload_Drag_List = [
  {
    text: '上传成功',
    event: 'onSuccess',
    disabled: false,
  },
  {
    text: '删除文件',
    event: 'onDelete',
    disabled: false,
  },
];

// 事件类型
export const Form_Event_List = [
  {
    text: '初始化数据前',
    event: 'beforeInit',
    disabled: false,
  },
  {
    text: '初始化',
    event: 'init',
    disabled: false,
  },
  {
    text: '提交数据接口请求前',
    event: 'beforeSumbit',
    disabled: false,
  },
  {
    text: '提交数据接口请求后',
    event: 'afterSumbit',
    disabled: false,
  },
];

export const jsDataHelp = `
 * 自定义JS使用说明：
 *  1. 通过上下文对象\`context\`可以获取当前组件实例，具体属性方法请参考（https://doc.vvbin.cn/components/form.html#formschema）
 *     const { formModel, formActionType ,messageFn ,formDesignInfo,parentParams} = context;
 *     console.log(context)
 *     formModel 表单数据值
 *     formActionType 表单的函数方法参考（https://doc.vvbin.cn/components/form.html#methods）
 *        const {setFieldsValue,getFieldsValue,validateFields,updateSchema} = context.formActionType ||{};
 *        // ******* setFieldsValue  设置表单的数据*******
 *        // ******* getFieldsValue  获取表单已填写的数据*******
 *        // ******* validateFields  校验表单*******
 *        // ******* updateSchema  更新控件属性 比如禁用控件，隐藏控件 *******
 *     messageFn 提示框对象函数方法参考 （https://github.com/vbenjs/vue-vben-admin/blob/main/src/hooks/web/useMessage.tsx）
 *  
 *   注意点：
 *      1.1 表单的函数定义
 *     // ***** formDesignInfo 只存在表单初始化事件中 是表单模型的配置数据   *****
 *     // ***** formModel 表单提交到后端的数据 *****
 *     // ***** messageFn 提示弹框  *****
 *  
 *     1.2 子表定义控件的函数定义
 *      子表定义控件中的平铺类型 只有 formModel 和 parentFormActionType 
 *            // ***** formModel 表示当前行的数据  *****
 *          // ***** formModel 表示表单的formActionType   *****
 *     1.3 parentParams 只存在控件中，表单函数定义以 args[0] 形式获取
 *  2. 通过 args 参数可以获取当前事件方法变化事传递的参数数组
 *    // ***** 表单初始化事件和提交前事件中只有表单外部传递的窗口参数args[0]  *****
 *    // ***** 表单提交后事件中第一个值是表单外部传递的窗口参数，第二个值是保存接口返回的数据  *****
 * 
 *   2.1 值变化事件示例 
 *      console.log(args)
 *      const [value,valueInlabel]= args;
 *      =====> // ['2',{value: '2',label: '二级',children: null}]; 
 *   
 *  3. defHttp 内置axios请求；使用请参考defHttp的使用 （https://doc.vvbin.cn/guide/mock.html#%E6%8E%A5%E5%8F%A3%E8%AF%B7%E6%B1%82）
 * 
 *    3.1  普通示例 
 *        const data = await defHttp.get({url:'/admin/dict/type/enable_status',params:{}})
 *
 *    3.2 文件上传示例
 *       await defHttp.uploadFile({url: "/jd/meter/exportWaterMeter",params:{}})
 * 
 *   3.3 覆盖axios 配置示例
 *    awit defHttp.post({  url:'xxx', params: {  scope: 'server', },  data, headers: { 'Content-Type': ContentTypeEnum.FORM_URLENCODED, Authorization: 'Basic cGlnOnBpZw==', }, }, {  errorMessageMode: 'none', isTransformResponse: false, });
 * 
`.split('\n *');

export const jsData = `/**
*  全局内置对象  context  args  defHttp
*   const { formModel,formActionType,messageFn,formDesignInfo,parentParams,dayjs,userInfo,downloadByData } = context;
*  使用异步交互示例
*   普通请求 1. const data = await defHttp.get({url:'/admin/dict/type/enable_status',params:{}})
*
*   文件上传 2. await defHttp.uploadFile({url: "/jd/meter/exportWaterMeter",params:{}})

*   文件流下载 3. 
*   const res = await defHttp.post({url: "/jd/meter/exportWaterMeter", responseType: 'arraybuffer',params:{},  { isTransformResponse: false, isReturnNativeResponse: true }})
*   const { data, headers, status } = res;
*   context.downloadByData(data, headers.filename )
*/

`;
export const JSCommentForTableForm = `/**
 *  自定义JS使用说明：
 *  1.通过上下文对象\`context\`可以获取当前组件实例，具体属性方法请参考（https://doc.vvbin.cn/components/form.html#formschema）
 *  const { formModel, formActionType} = context;
 *     formModel 表单数据值
 *     formActionType 表单的函数方法参考（https://doc.vvbin.cn/components/form.html#methods）
 *      const {setFieldsValue,getFieldsValue,validateFields,updateSchema} = context.formActionType ||{};
 *        // ******* setFieldsValue  设置表单的数据*******
 *        // ******* getFieldsValue  获取表单已填写的数据*******
 *        // ******* validateFields  校验表单 *******
 *        // ******* updateSchema  更新控件属性 比如禁用控件，隐藏控件 *******
 * 
 *  2.通过 args 参数可以获取当前事件方法变化事传递的参数数组
 */

`;

// export const JSCommentForBtn = `/**
//   * 表格项目区按钮和表单按钮隐藏表达式自定义JS使用说明
//   *   支持异步接口请求 defHttp 使用参考 （https://doc.vvbin.cn/guide/mock.html#%E6%8E%A5%E5%8F%A3%E8%AF%B7%E6%B1%82）
//   *   record 对象为按钮的数据
//   *   record.ifShow = false  // 隐藏按钮
//   *
//   *
//   * 表格行内按钮隐藏表达式自定义JS使用说明 **注意不支持接口调用与异步方法**
//   *   record 对象为当前行的数据
//   *   1. return 返回为 true 则隐藏
//   *   2. return 返回为 false 则显示
//   *
//   *   示例： return [1,2,3].includes(record.field)
//   */

// `;
export const JSCommentForBtn = [
  '支持异步接口请求 defHttp 使用参考（https://doc.vvbin.cn/guide/mock.html#%E6%8E%A5%E5%8F%A3%E8%AF%B7%E6%B1%82）',
  '***record 对象为当前的数据***',
  '====== 表格项目区按钮 ======',
  '1. record.ifShow = false 隐藏按钮',
  '2. record.ifShow = true 显示 ',
  '示例： record.ifShow = record.field === 2',

  '======表格行内按钮 ======',
  '1. return  true 则隐藏按钮',
  '2. return 返回为 false 则显示 ',
  '示例： return [1,2,3].includes(record.field)',
];

export const JSCommentForFormBtn = [
  '支持异步接口请求 defHttp 使用参考（https://doc.vvbin.cn/guide/mock.html#%E6%8E%A5%E5%8F%A3%E8%AF%B7%E6%B1%82）',
  '***record 对象为当前的数据***',
  '====== 表格项目区按钮 ======',
  '1. record.ifShow = false 隐藏按钮',
  '2. record.ifShow = true 显示 ',
  '示例： record.ifShow = record.field === 2',
];

export const JSCommentForBtnOnClick = [
  'defHttp 支持异步接口请求 使用参考 （https://doc.vvbin.cn/guide/mock.html#%E6%8E%A5%E5%8F%A3%E8%AF%B7%E6%B1%82）',
  'context 当前上下文对象 可获取当前页面的方法',
  'schema 为按钮配置数据',
  '表格的函数方法参考( https://doc.vvbin.cn/components/table.html#methods )',
  'const { tableActionType,messageFn, parentParams } = context;',
];

export const JSCommentForFormBtnOnClick = [
  'defHttp 支持异步接口请求 使用参考 （https://doc.vvbin.cn/guide/mock.html#%E6%8E%A5%E5%8F%A3%E8%AF%B7%E6%B1%82）',
  'context 当前上下文对象 可获取当前页面的方法',
  'schema 为按钮配置数据',
  '表单的函数方法参考( （https://doc.vvbin.cn/components/form.html#methods） )',
  'const { formModel, formActionType, messageFn, parentParams } = context;',
];

export const FileSourceTypeOptions = [
  {
    label: '自定义类型',
    value: 0,
  },
  {
    label: '接口类型',
    value: 1,
  },
];
